#!/usr/bin/python
# -*-coding:UTF-8 -*-

# ========================
# @Time  : 2021-01-30
# @Author: Sunny
# ========================

from ddt import data
#方法一：
# def doc(func):
#     """
#     :param func: 接收被装饰的函数
#     :return:
#     """
#     def wrapper(*args,**kwargs):
#         #调用原功能函数
#         func(*args,**kwargs)
#     return wrapper
#
# def var(name):
#     return doc

#方法二
#也是一个双层闭包
def var(name,age):
    def doc(func):
        """
        :param func: 接收被装饰的函数
        :return:
        """
        def wrapper(*args,**kwargs):
            print('装饰器扩展的功能代码')
            print('装饰器传递的参数name:',name)
            print('装饰器传递的参数age:', age)
            #调用原功能函数
            func(*args,**kwargs)
            print('-------------执行完毕-----------------')
        return wrapper
    return doc

#原理：先嗲用函数var(),返回的doc作为装饰器再去装饰，执行后返回的还是wrapper
#代码效果等同于  work()=var('python')(work)
@var('python27',18)
def work(a,b):
    print('a+b',a+b)

work(1,2)